package com.amc.common.annotation;

import java.lang.annotation.*;
import java.util.concurrent.TimeUnit;

@Documented
// 注解是否可以继承
@Inherited
// 指定注解在运行时保留
@Retention(RetentionPolicy.RUNTIME)
// 表示注解只能应用于方法上
@Target({ElementType.METHOD})
public @interface DistributedLock {

    /**
     * 分布式锁key
     * 支持SpEL 表达式
     */
    String key() default "";

    /**
     * 最大等待时间 时间单位以 unit为准
     * 默认值(-1) 不等待
     */
    int waitTime() default -1;

    /**
     * 加锁多久后自动解锁 时间单位以 unit为准
     * 默认值(-1)：默认30s，会通过watchDog机制自动续期
     * 其它值，值过期后会自动解锁，不会自动续期
     */
    int leaseTime() default -1;

    /**
     * 时间单位，默认s
     */
    TimeUnit unit() default TimeUnit.SECONDS;
}
